package api

import (
	"gitee.com/swsk33/server-demo/dataobject"
	"gitee.com/swsk33/server-demo/service"
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
)

// CharacterAPI 角色API层对象，仅存放每个请求对应的回调函数
type CharacterAPI struct {
	service *service.CharacterService
}

// NewCharacterAPI 构造函数（提供者）
func NewCharacterAPI(service *service.CharacterService) *CharacterAPI {
	return &CharacterAPI{service: service}
}

// Add 添加角色
func (api *CharacterAPI) Add(context *gin.Context) {
	// 解析响应体
	var char dataobject.Character
	_ = context.BindJSON(&char)
	// 传给Service
	result := api.service.Add(&char)
	// 返回响应
	context.JSON(http.StatusOK, result)
}

// DeleteChar 删除角色
func (api *CharacterAPI) DeleteChar(context *gin.Context) {
	// 解析URL中的id参数
	id, _ := strconv.Atoi(context.Param("id"))
	// 传给Service
	result := api.service.Delete(id)
	// 返回响应
	context.JSON(http.StatusOK, result)
}

// Update 修改角色
func (api *CharacterAPI) Update(context *gin.Context) {
	// 解析响应体
	var char dataobject.Character
	_ = context.BindJSON(&char)
	// 传给Service
	result := api.service.Update(&char)
	// 返回响应
	context.JSON(http.StatusOK, result)
}

// Get 查询角色
func (api *CharacterAPI) Get(context *gin.Context) {
	// 解析参数
	id, _ := strconv.Atoi(context.Param("id"))
	// 查询并返回响应
	context.JSON(http.StatusOK, api.service.Get(id))
}

// GetAll 查询全部
func (api *CharacterAPI) GetAll(context *gin.Context) {
	context.JSON(http.StatusOK, api.service.GetAll())
}